package org.depsea.oss.config.tenant;

import lombok.AllArgsConstructor;
import lombok.Data;
import org.depsea.oss.client.OssType;

import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;

public class TenantOssConfigProvider {

    private final Map<String, OssConfig> configMap = new HashMap<>();

    public void addConfig(String tenantId, OssType type, Map<String, String> config) {
        configMap.put(tenantId, new OssConfig(type, config));
    }

    public OssConfig getConfig(String tenantId) {
        return configMap.get(tenantId);
    }

    public void forEach(BiConsumer<String, OssConfig> consumer) {
        configMap.forEach(consumer);
    }

    @Data
    @AllArgsConstructor
    public static class OssConfig {
        private OssType type;
        private Map<String, String> config;

        public String getString(String key) {
            return config.get(key);
        }

        public String getString(String key, String defaultValue) {
            return config.getOrDefault(key, defaultValue);
        }

        public Integer getInt(String key) {
            String value = this.getString(key);
            if (value != null) {
                return Integer.parseInt(value);
            } else {
                return null;
            }
        }

        public Boolean getBoolean(String key, int defaultValue) {
            String value = this.getString(key);
            if (value != null) {
                return Boolean.valueOf(value);
            } else {
                return null;
            }
        }
    }

}
